package cn.edu.tjnu.db;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class DBDriver {

	/**
	 * 定义个静态的sessionfactory对象，并且使用静态变量，在内存只维持一份
	 */
	private static SessionFactory sf;

	// 静态语句块实现单件模式的功能
	static {
		// 静态语句块会在类被加载时执行，并且只执行一次
		if (sf == null) {
			// 1、获取Configuration对象
			Configuration conf = new Configuration().configure();
			// 2、获取sessionFactory对象
			// SessionFactory sf = conf.buildSessionFactory();
			// 这种写法在hibernate4.0以后过时，推荐使用下面的写法
			ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(conf.getProperties())
					.buildServiceRegistry();
			sf = conf.buildSessionFactory(sr);
		}
	}

	/**
	 * 获取hibernate的session对象
	 * 
	 * @return session对象
	 */
	public Session getSession() {
		// 进行hibernate测试
		// 3、打开sesion对象
		Session session = sf.openSession();
		// 返回session对象
		return session;
	}

	/**
	 * 关闭制定的session对象
	 * 
	 * @param session
	 *            被关闭的session对象
	 */
	public void closeSession(Session session) {
		session.close();
	}
}
